package fun.cyhgraph.mapper;

import com.github.pagehelper.Page;
import fun.cyhgraph.annotation.AutoFill;
import fun.cyhgraph.dto.CategoryTypePageDTO;
import fun.cyhgraph.entity.Category;
import fun.cyhgraph.enumeration.OperationType;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 分类
 */
@Mapper
public interface CategoryMapper {

    /**
     * 新增分类   (管理端)
     *
     * @param category
     */
    @AutoFill(OperationType.INSERT)
    @Insert("insert into category (name, type, sort, status, create_user, update_user, create_time, update_time) VALUES " +
            "(#{name}, #{type}, #{sort}, #{status}, #{createUser}, #{updateUser}, #{createTime}, #{updateTime})")
    void add(Category category);

    /**
     * 分类条件分页查询    (管理端)
     * (动态sql)
     * @param categoryTypePageDTO
     * @return
     */
    Page<Category> getPageList(CategoryTypePageDTO categoryTypePageDTO);

    /**
     * 根据id查询指定分类    (管理端)
     *
     * @param id
     * @return
     */
    @Select("select * from category where id = #{id}")
    Category getById(Integer id);

    /**
     * 根据id修改分类的起售/停售    (管理端)
     * @param id
     */
    @Update("update category set status = IF(status = 0, 1, 0) where id = #{id}")
    void onOff(Integer id);


    /**
     * 更新分类信息    (管理端)
     * （动态sql）
     * @param category
     */
    @AutoFill(OperationType.UPDATE)
    void update(Category category);

    /**
     * 根据id删除分类     (管理端)
     * @param id
     */
    @Delete("delete from category where id = #{id}")
    void delete(Integer id);



    /**
     * 获取所有分类列表数据     (用户端)
     * （动态sql） 根据type查询分类，没有就查所有，且只能查有启用的分类
     * @param type
     * @return
     */
    List<Category> getList(Integer type);
}
